<?xml version="1.0" encoding="UTF-8"?>
<html>
    <head>
        <link type="text/css" rel="stylesheet" href="./css/template.css" />
        <link type="text/css" rel="stylesheet" href="./css/SyntaxHighlighter.css" />
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Java 6, nom de code Mustang</title>
        <script language="javascript" src="./js/shInit.js" />
        <script language="javascript" src="./js/shCore.js" />
        <script language="javascript" src="./js/shBrushCpp.js" />
        <script language="javascript" src="./js/shBrushCSharp.js" />
        <script language="javascript" src="./js/shBrushCss.js" />
        <script language="javascript" src="./js/shBrushDelphi.js" />
        <script language="javascript" src="./js/shBrushJava.js" />
        <script language="javascript" src="./js/shBrushJScript.js" />
        <script language="javascript" src="./js/shBrushPhp.js" />
        <script language="javascript" src="./js/shBrushPython.js" />
        <script language="javascript" src="./js/shBrushRuby.js" />
        <script language="javascript" src="./js/shBrushSql.js" />
        <script language="javascript" src="./js/shBrushVb.js" />
        <script language="javascript" src="./js/shBrushXml.js" />
        <keywords>Java 6,Mustang,béta,Rhino,XML,Road-Map,Quizz,binaires,System Tray,JTabbebPane,splash-screen</keywords>
        <keywords />
        <author>Jean-Baptiste Renaux</author>
    </head>
    <body>
        <div class="chapter">
            <h2>1. Introduction</h2>
            <p>Les premières versions béta de Java 6 (nom de code Mustang) sont sorties. Cela nous donne la possibilité d'essayer les nouvelles fonctionnalités proposées : amélioration au niveau des interfaces graphiques, l'intégration de la machine virtuelle, l'apparition des langages de scripts, et enfin, l'ajout de librairies autour du XML.</p>
        </div>
        <div class="chapter">
            <h2>2. Les interfaces graphiques</h2>
            <div class="subChapter">
                <p>Les JTabbebPane, utilisées pour représenter des navigations par onglet, ne pouvaient être représentées que par un texte, une image, ou par les deux. Dorénavant, il est possible d'utiliser l'objet « Component ». Dans la prise d'écran suivante, vous pouvez constatez l'utilisation d'un JLabel et d'un JButton afin de représenter l'onglet :</p>
                <img src="./images/Java6_html_22a2ea6b.png" />
                <p>Il y a également l'apparition d'un “System Tray” ou “barre système” en français. Cela permet d'afficher une icône dans le coin inférieur droit du bureau.</p>
                <img src="./images/Java6_html_75609488.png" />
                <p>
                    <i>Utilisation d'une barre système: une icône dans le coin de l'écran donne accès à un menu</i>
                </p>
                <p>De plus, il sera inclus l'utilisation des “splash-screen”, ce sont des images qui s'affichent au premier plan lorsqu'une application démarre. Cela sert en général à tenir au courant l'utilisateur sur les licences, ou d'autres informations commerciales. Pour activer cette fonctionnalité, il suffit seulement de préciser l'argument « -spash:chemin_de_l_image » au démarrage de la machine virtuelle.</p>
                <p>Pour finir cette partie, on citera l'ajout d'une classe appelée « SwingWorker », qui permet de placer facilement le traitement d'un « EventListener » dans un Thread, afin que l'interface graphique soit toujours accessible par l'utilisateur (les traitements lourds doivent être traités dans un fil d'exécution différent pour ne pas bloquer celui de l'interface graphique).</p>
            </div>
        </div>
        <div class="chapter">
            <h2>3. Intégration au système</h2>
            <div class="subChapter">
                <p>
                    On pouvait reprocher à la machine virtuelle java son manque d'intégration au système d'exploitation.
                    <b>Mustang</b>
                    vient combler ce manque et cela apportera une réelle qualité de travail.
                </p>
                <p>Tout d'abord, nous voyons l'apparition d'une nouvelle API : Desktop API (dans le paquetage java.awt.Desktop).
					Celle-ci permet d’interagir avec les applications associées avec des types de fichiers spécifiques. On peut ainsi lancer le navigateur internet, le client email, ou encore ouvrir, éditer et imprimer un fichier à partir de la configuration du système.
					Par exemple, si les extensions .doc sont associées avec Microsoft Office, votre application Java pourra exécuter Office pour ouvrir les fichiers avec cette association.</p>
                <p>L'API est principalement articulé autour de ces méthodes :</p>
                <p>
                    Desktop.isDesktopSupported() : renvoie un booléen pour savoir si cette fonctionnalité est supportée
                    <br />
                    Desktop.getDesktop() : renvoie une instance de type Desktop capable d'interagir avec le système.
                    <br />
                    Les principales méthodes de cette classe sont «  browse », « mail », « open », « edit » et « print », afin de, respectivement, exécuter le navigateur internet, exécuter le gestionnaire de courriels, ouvrir, éditer, et imprimer un fichier. La méthode « isSupported(Desktop.Action.XXX) », permet également de vérifier si une fonctionnalité est disponible (XXX représente une constante).
					On remarquera que sous linux, ce sont les préférences de Gnome qui sont prises en compte (même si vous utilisez KDE ou autre).
                </p>
                <p>La classe java.io.File a été enrichie de méthodes afin de gérer les droits de lecture, écriture et d'exécution (« set/getReadable() », « set/getWritable(), « set/getExecutable() »).
					On peut également récupérer la taille disponible sur la partition (getTotalSpace(), getFreeSpace(), getUsableSpace()).</p>
                <p>Des améliorations ont également été apportées au support d'OpenGL, et à l'implémentation d'un réel doubleBuffering à l'intérieur même de Swing/AWT/Java 2D (cela permet, entre autre, un meilleur rafraîchissement des fenêtres).</p>
            </div>
        </div>
        <div class="chapter">
            <h2>4. Gestion de scripts avec Rhino</h2>
            <div class="subChapter">
                <p>Le support des langages de script est inclus dans Java 6. Celui-ci permettra à terme de supporter un nombre très important de langages interprétés. Une version modifiée de Rhino, un moteur JavaScript développé par la fondation Mozilla, est déjà incluse. Ainsi, l'ensemble des classes de Java est disponible avec une syntaxe JavaScript.</p>
                <p>Une invite de commande est fourni avec le kit de développement : « jrunscript ». Voici quelques lignes de code que vous pouvez exécuter dans celle-ci, et qui afficheront une fenêtre :</p>
                <textarea name="code" class="java">js&gt; var frame = new Packages.javax.swing.JFrame();
					js&gt; frame.addWindowListener(function(event, methodName) {
					if (methodName == "windowClosing") {
					print("Calling System.exit()..."); java.lang.System.exit(0);
					}
					});
					js&gt; frame.setSize(100, 100);
					js&gt; frame.visible = true;</textarea>
                <p>
                    Les avantages sont les suivants :
                    <br />
                    - simplification du langage dans certains cas, avec une large palette de moteur de scripts (BeanShell, Rhino, Jython, Jruby, ...)
                    <br />
                    - automatisation des tâches
                    <b>de l'utilisateur</b>
                    , un peu comme
                    <b>VB Script</b>
                    dans
                    <b>Office</b>
                    ou
                    <b>JavaScript</b>
                    dans des
                    <b>applications Web</b>
                    .
                    <br />
                    - compilation à la volée lors de l'utilisation du script ou avant l'exécution lors de la phase de production de votre programme (disponibles uniquement sur certains moteurs).
                    <br />
                    <br />
                    Certains risques sont à prendre en compte:
                    <br />
                    - que les scripts soient buggés. En effet, les scripts ne sont pas compilés donc cela accroit les risques
                    <br />
                    - qu'un moteur de script ne soit plus maintenu
                </p>
            </div>
        </div>
        <div class="chapter">
            <h2>5. Ouverture au XML</h2>
            <div class="subChapter">
                <p>
                    <b>Sun</b>
                    a affiché très clairement sa volonté de renforcer la pile des technologies
                    <b>XML</b>
                    présentes dans la machine virtuelle et de faciliter le développement des
                    <b>services web</b>
                    .
                </p>
                <p>Il sera intégré la librairie JAX-WS 2.0 (Java API for XML Web Services), anciennement JAX-RPC. Cette API permet de mettre en place des solutions client/serveur.</p>
                <p>L'écriture d'un web-service est largement simplifiée, via l'utilisation de quelques annotations. Voici un exemple de code :</p>
                <textarea name="code" class="java">package my.sample.server;
					import javax.jws.WebParam;
					import javax.jws.WebService;
					import javax.jws.WebMethod;
					/**
					* Une classe Java qui va devenir un web-service
					* Nous spécifions ici les informations nécessaire au déploiement
					* via l'annotation @WebService
					*/
					@WebService(name="Hello", serviceName="HelloService", targetNamespace="http://hello.com")
					public class ServiceImpl {
					// la méthode suivante sera accessible sur le web-service
					@WebMethod
					public String hello(@WebParam(name="name") String s) {
					System.out.println("Service received: " + s);
					return "Hello "+s;
					}
					}</textarea>
                <p>Viens s'ajouter également JAXB 2.0 (Java Architecture for XML Binding). Cette librairie effectue la liaison entre un document XML et un JavaBean, et inversement. Ainsi, cela permet de sérialiser/désérialiser une classe. On utilise également des annotations pour configurer les classes. Voici un exemple de code :</p>
                <textarea name="code" class="java">
                    // l'annotation suivante est utilisée pour convertir la classe en XML
					@XmlRootElement
					public class School {
					private String name;
					private String address;
					private Collection
                    <string>students ;
						...
						Nous devons écrire quelques lignes de code pour sérialiser l'instance :
						// configuration de la sérialisation
						JAXBContext context = JAXBContext.newInstance(Scholl.class);
						Marshaller m = context.createMarshaller();
						m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
						// création d'une instance
						School school = new School();
						...
						// sérialisation de l'instance
						m.marshal(school, System.out);</string>
                </textarea>
                <p>Voici le code XML récupéré, qui pourra être réutilisé pour générer l'état d'une instance, toujours avec JAXB :</p>
                <textarea name="code" class="xml">
                    &lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;
                    <school>
                        <address>Paris</address>
                        <name>la sorbonne</name>
                        <students>test1</students>
                        <students>test2</students>
                        <students>test3</students>
                    </school>
                </textarea>
                <p>Une autre libraire, JAXP (Java API for XML Processing), passera en version 1.4, avec l'intégration de l'API d'analyse syntaxique StAX (JSR 173). Il s'agit d'une librairie dédié à la validation, très utilisé par JAXB (vu précédemment). Il permet de vérifier qu'un document XML soit valide via un schéma xsd, et propose un système personnalisable de gestion des erreurs avec un système de « listener ».</p>
                <p>D’autres fonctionnalités XML intéressantes sont disponibles dans JDBC 4, cependant pour l'instant, aucune implémentation n'a été proposée.</p>
            </div>
        </div>
        <div class="chapter">
            <h2>6. Road-Map</h2>
            <p>Il faut tout d'abord savoir que les spécifications ont déjà été approuvées dans la JSR-270, donc il ne s'agit plus que d'une question d'implémentation et de stabilité. Des versions béta apparaissent depuis le mois de février et continueront à voir le jour jusqu'en automne, car une version finale devrait être disponible avant l'hiver 2006.</p>
        </div>
        <div class="chapter">
            <h2>7. Tester ses compétences</h2>
            <p>Le portail « Sun Developer Network » nous propose un quizz sur les nouveautés de Java SE 6.0. L'intérêt se trouve bien sûr dans les réponses car cela permet d'avoir un petit aperçu général de ce qu'apportera la prochaine version de Java.</p>
        </div>
        <div class="chapter">
            <h2>8. Conclusion</h2>
            <p>Cette nouvelle version propose avant tout d'inclure des fonctionnalités déjà existantes mais incluses dans des librairies tierces. Cela devrait avant tout simplifier la gestion des projets en évitant d'inclure de trop nombreux fichiers jar.</p>
            <p>Un autre élément intéressant à analyser dans les prochains temps sera l'amélioration des performances, car les prochains benchmark semblent intéressant. Java sera-t-il bientôt plus rapide que le C ?</p>
        </div>
        <div class="chapter">
            <h2>9. Liens</h2>
            <p>
                <a href="http://www.mozilla.org/rhino/" target="”_blank”">Rhino Script</a>
            </p>
            <p>
                <a href="http://www.philippe.prados.name/Langage/Java/Rhino/Rhino.pdf" target="”_blank”">Fonctionnement de rhino</a>
            </p>
            <p>
                <a href="http://download.java.net/jdk6/binaries/" target="”_blank”">Téléchargements des binaires de previews de Mustang</a>
            </p>
            <p>
                <a href="http://java.sun.com/developer/Quizzes/mustang_holiday/" target="”_blank”">Quizz Java 6</a>
            </p>
            <p>Fin du document</p>
        </div>
    </body>
</html>

